home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 1 / Amiga Tools.iso / disk-tools / cd-tools / amicdrom / generic.h < prev    next >
C/C++ Source or Header  |  1994-06-06  |  5KB  |  129 lines

  1. /* generic.h: */
  2.  
  3. #ifndef _GENERIC_H_
  4. #define _GENERIC_H_
  5.  
  6. #include "cdrom.h"
  7.  
  8. typedef unsigned long t_ulong;
  9. typedef unsigned short t_ushort;
  10. typedef unsigned char t_uchar;
  11. typedef int t_bool;
  12.  
  13. typedef enum protocol {
  14.   PRO_UNKNOWN,
  15.   PRO_ISO,
  16.   PRO_HIGH_SIERRA,
  17.   PRO_ROCK,
  18.   PRO_HFS
  19. } t_protocol;
  20.  
  21. typedef struct VOLUME {
  22.   CDROM         *cd;            /* Pointer to CDROM structure    */
  23.   t_protocol     protocol;        /* Protocol used        */
  24.   struct handler *handler;        /* Pointer to handler struct    */
  25.   void         *vol_info;        /* Depends on protocol        */
  26.   size_t     vol_info_size;        /* Size of vol_info structure    */
  27.   /* for use by the device handler: */
  28. #if 0
  29.   t_bool     valid;            /* Is the volume valid?        */
  30. #endif
  31.   int         locks;            /* Number of locks on this vol. */
  32.   int         file_handles;        /* Number of file handles on    */
  33.                       /* this volume            */
  34. } VOLUME;
  35.  
  36. typedef struct CDROM_OBJ {
  37.   t_bool        directory_f;    /* TRUE iff object is a directory     */
  38.   t_bool        symlink_f;    /* TRUE iff object is a symbolic link */
  39.   VOLUME        *volume;    /* Pointer to volume node          */
  40.   unsigned long        pos;        /* Current position (for read & seek) */
  41.   void            *obj_info;    /* Depends on protocol              */
  42. } CDROM_OBJ;
  43.  
  44. typedef struct CDROM_INFO {
  45.   t_bool        directory_f;    /* TRUE if object is a directory     */
  46.   t_bool        symlink_f;    /* TRUE if object is a symbolic link */
  47.   int            name_length;    /* length of file name             */
  48.   char            name[256];    /* file name                 */
  49.   unsigned long        date;        /* creation date             */
  50.   unsigned long        file_length;    /* length of file             */
  51.   void            *suppl_info;    /* supplementary information         */
  52. } CDROM_INFO;
  53.  
  54. /* Codes: M=mandatory,
  55.  *        O=optional (may be NULL)
  56.  */
  57.  
  58. typedef struct handler {
  59.   /*M*/ void      (*close_vol_info)(VOLUME *);
  60.   /*M*/ CDROM_OBJ *(*open_top_level_directory)(VOLUME *);
  61.   /*M*/ CDROM_OBJ *(*open_obj_in_directory)(CDROM_OBJ *, char *);
  62.   /*M*/ CDROM_OBJ *(*find_parent)(CDROM_OBJ *);
  63.   /*M*/ void      (*close_obj)(CDROM_OBJ *);
  64.   /*M*/ int      (*read_from_file)(CDROM_OBJ *, char *, int);
  65.   /*M*/ t_bool      (*cdrom_info)(CDROM_OBJ *, CDROM_INFO *);
  66.   /*M*/ t_bool      (*examine_next)(CDROM_OBJ *, CDROM_INFO *, unsigned long *);
  67.   /*M*/ void      *(*clone_obj_info)(void *);
  68.   /*M*/ t_bool      (*is_top_level_obj)(CDROM_OBJ *);
  69.   /*M*/ t_bool      (*same_objects)(CDROM_OBJ *, CDROM_OBJ *);
  70.   /*O*/    t_ulong      (*creation_date)(VOLUME *);
  71.   /*M*/ t_ulong   (*volume_size)(VOLUME *);
  72.   /*M*/ void      (*volume_id)(VOLUME *, char *, int);
  73.   /*M*/ t_ulong      (*location)(CDROM_OBJ *);
  74.   /*M*/ t_ulong      (*file_length)(CDROM_OBJ *);
  75.   /*M*/ t_ulong   (*block_size)(VOLUME *);
  76. } t_handler;
  77.  
  78. #define ISOERR_NO_MEMORY        1       /* out of memory                */
  79. #define ISOERR_SCSI_ERROR       2       /* scsi command return with err */
  80. #define ISOERR_NO_PVD           3       /* prim volume descr not found  */
  81. #define ISOERR_ILLEGAL_NAME     4       /* illegal path name            */
  82. #define ISOERR_NO_SUCH_RECORD   5       /* no such record in path table */
  83. #define ISOERR_NOT_FOUND        6       /* file not found               */
  84. #define ISOERR_OFF_BOUNDS       7       /* bad seek operation           */
  85. #define ISOERR_BAD_ARGUMENTS    8       /* bad arguments                */
  86. #define ISOERR_IS_SYMLINK       9       /* cannot open symbolic links   */
  87. #define ISOERR_INTERNAL        10       /* reason unknown               */
  88.  
  89. #define SEEK_FROM_START         -1      /* values for                   */
  90. #define SEEK_FROM_CURRENT_POS   0       /* the 'Seek_Position'          */
  91. #define SEEK_FROM_END           1       /* function                     */
  92.  
  93. extern int iso_errno;
  94.  
  95. t_protocol Which_Protocol (CDROM *p_cdrom, t_bool p_use_rock_ridge, int *p_skip,
  96.                t_ulong *p_offset);
  97.  
  98. VOLUME *Open_Volume (CDROM *p_cdrom, t_bool p_use_rock_ridge);
  99. void Close_Volume (VOLUME *p_volume);
  100.  
  101. CDROM_OBJ *Open_Top_Level_Directory (VOLUME *p_volume);
  102. CDROM_OBJ *Open_Object (CDROM_OBJ *p_current_dir, char *p_path_name);
  103. void Close_Object (CDROM_OBJ *p_object);
  104.  
  105. int Read_From_File (CDROM_OBJ *p_file, char *p_buffer, int p_buffer_length);
  106.  
  107. int CDROM_Info (CDROM_OBJ *p_obj, CDROM_INFO *p_info);
  108. t_bool Examine_Next (CDROM_OBJ *p_dir, CDROM_INFO *p_info, unsigned long *p_offset);
  109.  
  110. CDROM_OBJ *Clone_Object (CDROM_OBJ *p_object);
  111. CDROM_OBJ *Find_Parent (CDROM_OBJ *p_object);
  112.  
  113. t_bool Is_Top_Level_Object (CDROM_OBJ *p_object);
  114.  
  115. int Seek_Position (CDROM_OBJ *p_object, long p_offset, int p_mode);
  116.  
  117. t_bool Same_Objects (CDROM_OBJ *p_object1, CDROM_OBJ *p_object2);
  118. t_ulong Volume_Creation_Date (VOLUME *p_volume);
  119. t_ulong Volume_Size (VOLUME *p_volume);
  120. t_ulong Block_Size (VOLUME *p_volume);
  121. void Volume_ID (VOLUME *p_volume, char *p_buffer, int p_buf_length);
  122. t_ulong Location (CDROM_OBJ *p_object);
  123. int Full_Path_Name (CDROM_OBJ *p_obj, char *p_buf, int p_buf_length);
  124.  
  125. int Strncasecmp (char *p_str1, char *p_str2, int p_length);
  126.  
  127.  
  128. #endif /* _GENERIC_H_ */
  129.